package com.zoffy.wmsbackend.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zoffy.wmsbackend.model.dto.transfer.TransferDTO;
import com.zoffy.wmsbackend.model.dto.transfer.TransferOrderDto;
import com.zoffy.wmsbackend.model.entity.StockTransferOrder;
import com.zoffy.wmsbackend.model.vo.transfer.TransferOrderDetailsVo;
import com.zoffy.wmsbackend.model.vo.transfer.TransferOrderVo;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

public interface TransferOrderService extends IService<StockTransferOrder> {

    /**
     * 导入调拨单文件
     * @param file 上传的文件
     * @return 导入是否成功的布尔值
     * @throws IOException 处理文件时可能抛出的异常
     */
    Boolean importTransfer(MultipartFile file) throws IOException;

    /**
     * 添加调拨单
     * @param transferDto 包含调拨单信息的 DTO 对象
     * @return 添加是否成功的布尔值
     */
    Boolean transfer(TransferDTO transferDto);

    /**
     * 分页查询调拨单列表
     * @param requestParam 包含查询参数的请求对象
     * @return 包含调拨单视图对象的分页结果
     */
    Page<TransferOrderVo> listTransferOrderVoByPage(com.zoffy.wmsbackend.common.RequestParam<TransferOrderDto> requestParam);

    /**
     * 审批调拨单
     * @param id 要审批的调拨单的 ID
     * @return 审批是否成功的布尔值
     */
    boolean approval(Long id);

    /**
     * 根据 ID 获取调拨单详情
     * @param id 要查询的调拨单的 ID
     * @return 包含调拨单详情的视图对象
     */
    TransferOrderDetailsVo getDetailsById(Long id);
    Boolean generateTransferOrderByPlan(Long originWarehouseId, Long targetWarehouseId, Long materialUsagePlanId);
}